package com.cn.JUC.utils.case10;

import java.util.concurrent.FutureTask;

/**
 * @Title FutureTask
 * @Description 实现线程任务嵌套引用
 * 烧水泡茶逻辑：       洗水壶-烧开水-（泡茶）1
 *              洗茶壶-洗茶杯-拿茶叶-（泡茶）2
 *              其中，1要等待2执行完毕再继续
 *
 * @Author CAI ZHAI
 * @Date 2021/9/6 16:04
 **/
public class BoilWaterToMakeTea{
    public static void main(String[] args){
        // 创建任务T2的FutureTask
        FutureTask<String> ft2 = new FutureTask<>(new T2Task());
        // 创建任务T1的FutureTask
        FutureTask<String> ft1 = new FutureTask<>(new T1Task(ft2));
        // 线程T1执行任务ft1
        Thread T1 = new Thread(ft1);
        T1.start();
        // 线程T2执行任务ft2
        Thread T2 = new Thread(ft2);
        T2.start();
        // 等待线程T1执行结果
        try{
            System.out.println(ft1.get());
        }catch(Exception e){
            e.printStackTrace();
        }
    }
// 一次执行结果：
    /*T1:洗水壶...
    T2:洗茶壶...
    T1:烧开水...
    T2:洗茶杯...
    T2:拿茶叶...
    T1:拿到茶叶:龙井
    T1:泡茶...
    上茶:龙井*/
}
